//
// Created by ken on 2025/2/20.
//
#include "Driver_Usart.h"

/**
 *串口接收数据后改变原来数据的值函数
 * @param ReceiveData
 * @param ValueName
 * @param Length_ValueName
 * @param Before_Value
 * @param Length_Value
 * @return
 */
uint16_t Change_ReceiveData(char *ReceiveData, char *ValueName,
                            uint16_t Length_ValueName, uint16_t Before_Value,
                            uint16_t Length_Value) {
    // 改变后的变量值
    uint16_t After_Value;

    // 暂存字符
    char Temp_RxPacket[Length_ValueName];
    // 暂存改变值变量
    char Temp_Value[Length_Value];

    memset(Temp_Value, '\0', sizeof(Temp_Value));

    strncpy(Temp_RxPacket, ReceiveData,
            Length_ValueName);// 将接收到的字符串前n位取出,存在Temp_RxPacket中

    if (strcmp(Temp_RxPacket, ValueName) == 0) {// 判断是否等于需要修改的变量名
        strncpy(Temp_Value, ReceiveData + Length_ValueName,
                Length_Value);// 将变量改变后的值，写入到暂存字符数组中
        After_Value = (uint16_t) atoi(Temp_Value);
    } else {
        After_Value = Before_Value;
    }
    return After_Value;
}

/**
 * 串口2发送数据重定向
 * @param format
 * @param ...
 */
void Usart2_Printf(char *format, ...) {
    char String[100];
    va_list arg;
    va_start(arg, format);
    vsprintf(String, format, arg);
    va_end(arg);
    HAL_UART_Transmit_DMA(&huart2, (uint8_t *) &String, strlen(String));
}

/**
 * 串口1发送数据重定向
 * @param format
 * @param ...
 */
void Usart1_Printf(char *format, ...) {
    char String[100];
    va_list arg;
    va_start(arg, format);
    vsprintf(String, format, arg);
    va_end(arg);
    HAL_UART_Transmit_DMA(&huart1, (uint8_t *) &String, strlen(String));
}

/****************************************DMA串口接收模块**************************************************/

/********************************串口接收字符串**********************************/
// 串口接收字符串
char Usart1_RxData[RxSize];
char Usart2_RxData[RxSize];
/*****************************************************************************/

/********************************串口接收初始化**********************************/
/*
*                       放在main函数初始化的位置，初始化串口接收
*/
//HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Usart1_RxData, sizeof(Usart1_RxData));
//__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
//
//HAL_UARTEx_ReceiveToIdle_DMA(&huart2, Usart2_RxData, sizeof(Usart2_RxData));
//__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
/*****************************************************************************/
/**
         * 在Usart.h中extern dam接收句柄
         * 串口接收中断服务函数、放在main.c进行调用
         * 接受的数据类型为字符串、存放在Usart1_RxData、Usart2_RxData中
         * @param huart
         * @param Size
         */
//void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
//    if (huart == &huart1) {
//        HAL_UART_Transmit_DMA(&huart1, Usart1_RxData, Size);
//
//        HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Usart1_RxData, sizeof(Usart1_RxData));
//
//        __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
//    }
//    if (huart == &huart2) {
//        HAL_UART_Transmit_DMA(&huart2, Usart2_RxData, Size);
//
//        HAL_UARTEx_ReceiveToIdle_DMA(&huart2, Usart2_RxData, sizeof(Usart2_RxData));
//
//        __HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
//    }
//}

/********************************************************************************************************/
